﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using HelpInfo.GetMsWeb.Models;
using System.Text;

namespace HelpInfo.GetMsWeb.Controllers
{
    public class PlanningController : Controller
    {
        private progetEntities db = new progetEntities();

        // GET: Planning
        public ActionResult Index()
        {
            var plannings = db.Plannings.Include(p => p.Agent);
            return View(plannings.ToList());
        }

        // GET: Planning/Details/5
        public ActionResult Details(DateTime id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Planning planning = db.Plannings.Find(id);
            if (planning == null)
            {
                return HttpNotFound();
            }
            return View(planning);
        }

        [Authorize(Roles = "Agent")]
        public ActionResult IndexIndividuel()
        {
            progetEntities db1 = new progetEntities();
            Agent currentUser = db1.Agents.SingleOrDefault(user => user.Matricule == User.Identity.Name);

            var plannings =
                from p in db.Plannings
                where p.Matricule == User.Identity.Name 
                orderby p.Jour descending
                select new PlanningViewModel
                {
                    Heure_début1 = p.Heure_début1,
                    Heure_début2 = p.Heure_début2,
                    Heure_début3 = p.Heure_début3,
                    Heure_fin1 = p.Heure_fin1,
                    Heure_fin2 = p.Heure_fin2,
                    Heure_fin3 = p.Heure_fin3,
                    Nom = currentUser.Nom,
                    Prénom = currentUser.Prénom,
                    IDEtablissement1 = p.IDEtablissement1,
                    IDEtablissement2 = p.IDEtablissement2,
                    IDEtablissement3 = p.IDEtablissement3,
                    Jour = p.Jour,
                    nuit = p.nuit,
                    Num_semaine = p.Num_semaine,
                    Pause1 = p.Pause1,
                    Pause2 = p.Pause2,
                    Repas1 = p.Repas1,
                    Repas2 = p.Repas2,
                    Repas3 = p.Repas3,
                    Type_Prise1 = p.Type_Prise1,
                    Type_Prise2 = p.Type_Prise2,
                    Type_Prise3 = p.Type_Prise3
                };
            if(User.IsInRole("Agent"))
            {
                ViewBag.FullName = string.Format("{0} {1}", currentUser.Nom, currentUser.Prénom);
            }
            return View(plannings.ToList());

        }

        [HttpGet]
        [Authorize(Roles = "Agent")]
        public ActionResult IndexCollectif()
        {
            progetEntities db1 = new progetEntities();
            Agent currentUser = db1.Agents.SingleOrDefault(user => user.Matricule == User.Identity.Name);
            List<SelectListItem> listSelectListItems = new List<SelectListItem>();
            
            foreach (Agent agent in db1.Agents)
            {
                SelectListItem selectList = new SelectListItem()
                {
                    Text = agent.Nom + " " + agent.Prénom, 
                    Value = agent.Matricule,
                    Selected = string.Equals( User.Identity.Name , agent.Matricule)
                };
                listSelectListItems.Add(selectList);
            }

            var plannings =
                from p in db.Plannings
                where p.Matricule == User.Identity.Name 
                orderby p.Jour descending
                select new PlanningViewModel
                {
                    Matricule = p.Matricule,
                    Heure_début1 = p.Heure_début1,
                    Heure_début2 = p.Heure_début2,
                    Heure_début3 = p.Heure_début3,
                    Heure_fin1 = p.Heure_fin1,
                    Heure_fin2 = p.Heure_fin2,
                    Heure_fin3 = p.Heure_fin3,
                    IDEtablissement1 = p.IDEtablissement1,
                    IDEtablissement2 = p.IDEtablissement2,
                    IDEtablissement3 = p.IDEtablissement3,
                    Jour = p.Jour,
                    nuit = p.nuit,
                    Num_semaine = p.Num_semaine,
                    Pause1 = p.Pause1,
                    Pause2 = p.Pause2,
                    Repas1 = p.Repas1,
                    Repas2 = p.Repas2,
                    Repas3 = p.Repas3,
                    Type_Prise1 = p.Type_Prise1,
                    Type_Prise2 = p.Type_Prise2,
                    Type_Prise3 = p.Type_Prise3
                };

            var planningCollectifViewModel = new PlanningCollectifViewModel
            {
                PlanningIndividuel = plannings,
                AgentsList = listSelectListItems
            };
            return View(planningCollectifViewModel);

        }

        [HttpPost]
        [Authorize(Roles = "Agent")]
        public ActionResult IndexCollectif(PlanningCollectifViewModel planningCollectif)
        {
            progetEntities db1 = new progetEntities();
            Agent currentUser = db1.Agents.SingleOrDefault(user => user.Matricule == User.Identity.Name);
            List<SelectListItem> listSelectListItems = new List<SelectListItem>();

            foreach (Agent agent in db1.Agents)
            {
                SelectListItem selectList = new SelectListItem()
                {
                    Text = agent.Nom + " " + agent.Prénom,
                    Value = agent.Matricule,
                };
                listSelectListItems.Add(selectList);
            }

            PlanningCollectifViewModel planningCollectifViewModel = null;

            if(planningCollectif.SelectedAgents != null)
            {
                //http://weblogs.asp.net/dwahlin/archive/2008/05/09/using-linq-to-perform-quot-where-in-value1-value2-quot-queries.aspx
                 var plannings =
                    from p in db.Plannings
                    where 
                        planningCollectif.SelectedAgents.Contains(p.Matricule) 
                        && p.Visible1 == true 
                        && p.Visible2 == true 
                        && p.Visible3 == true 
                    from d in db.Etablissements
                    where
                        p.Jour >= d.Début_période && p.Jour <= d.Fin_période
                    select new PlanningViewModel
                    {
                        Matricule = p.Matricule,
                        Heure_début1 = p.Heure_début1,
                        Heure_début2 = p.Heure_début2,
                        Heure_début3 = p.Heure_début3,
                        Heure_fin1 = p.Heure_fin1,
                        Heure_fin2 = p.Heure_fin2,
                        Heure_fin3 = p.Heure_fin3,
                        IDEtablissement1 = p.IDEtablissement1,
                        IDEtablissement2 = p.IDEtablissement2,
                        IDEtablissement3 = p.IDEtablissement3,
                        Jour = p.Jour,
                        nuit = p.nuit,
                        Num_semaine = p.Num_semaine,
                        Pause1 = p.Pause1,
                        Pause2 = p.Pause2,
                        Repas1 = p.Repas1,
                        Repas2 = p.Repas2,
                        Repas3 = p.Repas3,
                        Type_Prise1 = p.Type_Prise1,
                        Type_Prise2 = p.Type_Prise2,
                        Type_Prise3 = p.Type_Prise3
                    };
                planningCollectifViewModel = new PlanningCollectifViewModel
                {
                    PlanningIndividuel = plannings,
                    AgentsList = listSelectListItems,
                    SelectedAgents = planningCollectif.SelectedAgents
                };
            }
            else
            {
               return RedirectToAction("IndexCollectif");
            }



            return View(planningCollectifViewModel);

        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
